package kr.co.bettersoft.pushchat.activity;

import java.util.List;

import kr.co.bettersoft.pushchat.common.CommonConstant;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
/**
 * NotiTouchActionControlActivity
 * 푸시를 터치했을때 어떻게 처리할지를 결정하는 액티비티이다.
 *  로그인 화면으로 갈지, 해당 채팅방 화면으로 갈지, 현재 채팅방을 새로고침할지 등을 결정한다.
 * @author blue
 *   
 */
public class NotiTouchActionControlActivity extends Activity{
	/////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수
	String TAG = "NotiTouchActionControlActivity";

	ChatRoomActivity chatRoomActivity = (ChatRoomActivity)ChatRoomActivity.chatRoomActivity;			

	SharedPreferences sharedPrefCustom;	// 공용 프립스	
	public static int count = 0;		// 프로세스 다중 실행 방지 위한 카운터

	// 전달 받은 데이터
	Intent receivedIntent;
	String runMode = "";
	String receivedChatRoomId = "";
	String receivedChatRoomOwner = "";
	String receivedUserId = "";

	String savedUserId = "";
	String loginYn = "";

	//////////////////////////////////////////////////////////////////////////////////////////////////////	


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		setContentView(R.layout.dummy_activity);
		Log.w(TAG,"NotiTouchActionControlActivity onCreate");

		// 프립
		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

		savedUserId = sharedPrefCustom.getString("userId", "");
		loginYn = sharedPrefCustom.getString("loginYn", "N");
		// 전달받은 데이터 꺼내기
		receivedIntent = getIntent();
		runMode = receivedIntent.getStringExtra("RunMode");
		receivedChatRoomId = receivedIntent.getStringExtra("chatRoomId");
		receivedChatRoomOwner = receivedIntent.getStringExtra("chatRoomOwner");
		receivedUserId = receivedIntent.getStringExtra("receivedUserId");
		if(runMode==null){
			Log.d(TAG,"runMode is null");
			runMode = "";
		}
		if(receivedChatRoomId==null){
			Log.d(TAG,"receivedChatRoomId is null");
			receivedChatRoomId = "";
		}
		if(receivedChatRoomOwner==null){
			Log.d(TAG,"receivedChatRoomOwner is null");
			receivedChatRoomOwner = "";
		}
		if(receivedUserId==null){
			Log.d(TAG,"receivedUserId is null");
			receivedUserId = "";
		}
		Log.d(TAG,"runMode :"+runMode);
		Log.d(TAG,"receivedChatRoomId :"+receivedChatRoomId);
		Log.d(TAG,"receivedChatRoomOwner :"+receivedChatRoomOwner);
		Log.d(TAG,"receivedUserId :"+receivedUserId);



		//		// 예외처리.
		//		if(CommonConstant.appRunningYn==null){
		//			Log.d(TAG,"CommonUtils.appRunningYn==null");
		//			CommonConstant.appRunningYn = false;
		//		}
		//		if(CommonConstant.chatRoomUsingYn==null){
		//			Log.d(TAG,"CommonUtils.chatRoomUsingYn==null");
		//			CommonConstant.chatRoomUsingYn = false;
		//		}
		//		if(CommonConstant.currentChatRoomId==null){
		//			Log.d(TAG,"CommonUtils.currentChatRoomId==null");
		//			CommonConstant.currentChatRoomId = "";
		//		}
		//		if(CommonConstant.currentChatRoomOwner==null){
		//			Log.d(TAG,"CommonUtils.currentChatRoomOwner==null");
		//			CommonConstant.currentChatRoomOwner = "";
		//		}

		Boolean appRunningYn = sharedPrefCustom.getBoolean("appRunningYn", false);
		Boolean chatRoomUsingYn = sharedPrefCustom.getBoolean("chatRoomUsingYn", false);
		String currentChatRoomId = sharedPrefCustom.getString("currentChatRoomId", "");
		String currentChatRoomOwner = sharedPrefCustom.getString("currentChatRoomOwner", "");

		try{
			// 실행중인지 확인
			isRunningProcess(this, CommonConstant.packageNames);	
			if(count<2 && appRunningYn){	// 실행중
				Log.d(TAG,"실행중");

				// 로그인 여부 확인. 로그인 하지 않았다면 그냥 로그인 화면으로 보냄.
				if(loginYn.equals("N")){		// 로그인 하지 않은 상태
					Log.d(TAG,"로그인 안함");
					// 지금 로그인 화면임.  값을 전달.
					LoginActivity.receivedUserId = receivedUserId;
					LoginActivity.receivedChatRoomId = receivedChatRoomId;
					LoginActivity.receivedChatRoomOwner = receivedChatRoomOwner;
				}else{		// 로그인 한 상태
					// 노티를 터치한 시점에 저장된 아이디와 노티가 생성되었을때의 아이디가 동일한지 체크한다. 다른 아이디로 들어와서 터치하면 곤란하기 때문.
					Log.d(TAG,"savedUserId::"+savedUserId+"//receivedUserId::"+receivedUserId);
					if((!savedUserId.equals("")) && savedUserId.equals(receivedUserId) ){		// 노티 생성 시점과, 터치 시점의 사용자가 동일함.
						Log.d(TAG,"사용자 동일함");
						// 채팅방에 있는지 확인
						if(chatRoomUsingYn){	// 현재 채팅방에 있음
							Log.d(TAG,"채팅방에 있음");

							// 동일한 채팅방인지 확인. 방번호와 방장 아이디이용.
							if(receivedChatRoomId.equals(currentChatRoomId) && receivedChatRoomOwner.equals(currentChatRoomOwner)){	// 동일한 채팅방인가?
								Log.d(TAG,"same room - skip");
								// 동일한 채팅방에 있음 - 리프레시 생략.

							}else{	// 다른 채팅방에 있을때 데이터 갱신 후 리프레시 
								Log.d(TAG,"other chat room - update & refresh");
								chatRoomActivity.updateDataAndCallRefresh(receivedChatRoomId, receivedChatRoomOwner);
							}                

						}else {		// 채팅방에 없을때 데이터 전달하여 실행 
							Log.d(TAG,"채팅방에 없음 - move to chat room");

							Intent intent = new Intent(NotiTouchActionControlActivity.this, ChatRoomActivity.class);
							intent.putExtra("idChat", receivedChatRoomId);			// 방번호
							intent.putExtra("owner", receivedChatRoomOwner);		// 방장 아이디

							SharedPreferences.Editor saveChatRoomStatusPref = sharedPrefCustom.edit();
							saveChatRoomStatusPref.putBoolean("chatRoomUsingYn", true);			   		// 채팅방 사용중. (푸시를 통한 리프레시 기능을 위해 필요)	
							saveChatRoomStatusPref.putString("currentChatRoomId", receivedChatRoomId);		//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀도 바꿔야)
							saveChatRoomStatusPref.putString("currentChatRoomOwner", receivedChatRoomOwner);	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
							saveChatRoomStatusPref.commit();
							//							CommonConstant.chatRoomUsingYn = true;							// 채팅방 사용중. (푸시를 통한 리프레시 기능을 위해 필요)
							//							CommonConstant.currentChatRoomId = receivedChatRoomId;			//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀 포함) 
							//							CommonConstant.currentChatRoomOwner = receivedChatRoomOwner;  	//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀 포함)  

							startActivity(intent);
						}
					}else{		// 사용자가 다르다면 푸시는 무시한다. 다른 사람의 것이기 때문.
						Log.d(TAG,"사용자 다름 - noti ignore");
					}
				}

			}else{	// 실행중이 아님 --> 로그인 페이지.
				Log.d(TAG,"실행중이 아님  - login gogo");
				Intent intent = new Intent(NotiTouchActionControlActivity.this, LoginActivity.class);
				intent.putExtra("userId", receivedUserId);		
				intent.putExtra("chatRoomId", receivedChatRoomId);		
				intent.putExtra("chatRoomOwner", receivedChatRoomOwner);	
				startActivity(intent);
			}	
		}catch(Exception e){	// CommonUtils 가 생성되지 않은건 어플이 실행되지 않은것과 같다.
			Log.d(TAG,"no exected  - login go");
			Intent intent = new Intent(NotiTouchActionControlActivity.this, LoginActivity.class);
			intent.putExtra("userId", receivedUserId);		
			intent.putExtra("chatRoomId", receivedChatRoomId);		
			intent.putExtra("chatRoomOwner", receivedChatRoomOwner);	
			startActivity(intent);
		}
		finish();
	}

	/**
	 * isRunningProcess
	 *  중복 실행 방지를 위해 카운팅 체크를 한다.
	 *
	 * @param context
	 * @param packageName
	 * @return isRunning
	 */
	public static boolean isRunningProcess(Context context, String packageName) {
		count = 0;
		boolean isRunning = false;
		ActivityManager actMng = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);   
		List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
		for(RunningAppProcessInfo rap : list) {
			if(rap.processName.equals(packageName)) {
				isRunning = true;
				count= count+1;		// 실행중인 어플수 (중복 실행 방지 용)
				Log.d("Log","count:"+count);
				break;
			}
		}
		return isRunning;
	}


}
